home *** CD-ROM | disk | FTP | other *** search
/ Micro R&D 5: Mand 2000 / Mand 2000 - Micro R&D CD-ROM Vol 5.iso / arexx / juliamovie.mnd2 < prev    next >
Text File  |  1994-10-08  |  6KB  |  186 lines

  1. /* This script is supplied with the Mand2000 demo and release */
  2. /* versions and may be freely distributed. */
  3. /* Copyright 1993 Cygnus Software. */
  4.  
  5. /* This script has been updated for Mand2000 version 2.0, and now creates */
  6. /* animation files directly. */
  7.  
  8. /* Set the total number of frames to be calculated. */
  9.  
  10. NumFrames = 35
  11.  
  12.  
  13.  
  14. /*
  15.     This script is for calculating Julia seed movies.  As you drag
  16. the  Julia  seed  across  the  Mandelbrot  set  the  Julia set changes
  17. dramatically,  and  this  script  allows  you  to  easily calculate an
  18. animation  of  these  changes,  thus allowing you to play them back in
  19. real time.
  20.  
  21.     This  script  takes the julia seed location when you initially
  22. run the script as the start point, and then asks you to select another
  23. point.   It  then smoothly moves from one pointer to the other, saving
  24. the frames out as calculated.  If you ask it to save out full screens,
  25. then the Mandelbrot set with the seed pointer moving across it will be
  26. saved also, showing the cause and effect.
  27.  
  28.     The  number  of  frames  calculated  can  easily be changed by
  29. adjusting the variable at the top of the script.
  30.  
  31.     The resulting animation can be easily loaded into DPaint or any
  32. animation player.
  33.     */
  34.  
  35. portname = address()    /* Retrieve the current port name. */
  36. /* If the portname does not start with MAND2000 then this script must */
  37. /* have been run with rx, rather than from Mand2000.  Therefore we */
  38. /* need to set the port name.  We do not always set the port name */
  39. /* because it is better to let Mand2000 set it for us, so that */
  40. /* this script can be used with windows other than the one with */
  41. /* port name MAND2000.1. */
  42. if (left(portname, 8) ~= "MAND2000") THEN
  43.     address 'MAND2000.1'
  44.  
  45. options results
  46.  
  47. /* Parse out the command option.  This script is called when the */
  48. /* user wants a movie started, when the user wants a movie */
  49. /* aborted and whenever one of the pictures in the sequence is done. */
  50.  
  51. parse arg command
  52.  
  53. command = upper(command)    /* Make sure the command is in upper case. */
  54.  
  55. if (command = START) then
  56.     CALL StartJULIAMovie()
  57. else if (command = STOP) then
  58.     CALL StopJULIAMovie()
  59. else
  60.     CALL ContinueJULIAMovie()
  61.  
  62. Exit
  63.  
  64.  
  65.  
  66. CleanupStartup:
  67.     /* Turn the julia seed requester off, if that's how it started. */
  68.     if (juliaseedstate = 0) THEN
  69.         REQUESTER JULIASEED OFF
  70.     RETURN 0
  71.  
  72.  
  73.  
  74. StartJULIAMovie:
  75.     GETATTR stem PROJ
  76.     /* Julia fractal types are always odd. */
  77.     if ((PROJ.FRACTALTYPE // 2) ~= 1) THEN DO
  78.         DISPLAYMESSAGE PROMPT "A Julia window must be active when|making these movies.  Please|activate a Julia window and try|again."
  79.         EXIT
  80.         END
  81.  
  82.     GETATTR stem PROJ
  83.     StartX = PROJ.JuliaX
  84.     StartY = PROJ.JuliaY
  85.     CALL SETCLIP("JuliaMovieStart.X", PROJ.JuliaX)
  86.     CALL SETCLIP("JuliaMovieStart.Y", PROJ.JuliaY)
  87.  
  88.     DECPAUSE        /* Allow Mand2000 to resume calculating while this script executes. */
  89.  
  90.     REQUESTER JULIASEED    /* See whether the julia seed requester is up already. */
  91.     juliaseedstate = RESULT
  92.     REQUESTER JULIASEED ON    /* Force it to be up regardless. */
  93.  
  94.     REQUESTNOTIFY "The current seed location will be|used as the animation start.|Select the end seed location and|click `Continue'."
  95.  
  96.     GETATTR stem PROJ
  97.     CALL SETCLIP("JuliaMovieEnd.X", PROJ.JuliaX)
  98.     CALL SETCLIP("JuliaMovieEnd.Y", PROJ.JuliaY)
  99.  
  100.     /* Turn the julia seed requester off, if that's how it started. */
  101.     if (juliaseedstate = 0) THEN
  102.         REQUESTER JULIASEED OFF
  103.  
  104.     REQUESTSAVEFILE 'title="Julia anim file name."' 'path="RAM:"' 'file="Julia.Anim"'
  105.     filename = result
  106.     if (RC ~= 0) THEN DO
  107.         REQUESTNOTIFY "No filename given."
  108.         RETURN 0
  109.         END
  110.  
  111.     REQUESTRESPONSE "Would you like full screen|images saved?"
  112.     if (RC = 0) THEN
  113.         OpenScreenAnim filename
  114.     ELSE
  115.         OpenAnim filename
  116.  
  117.     if (RC ~= 0) THEN DO
  118.         REQUESTNOTIFY "Couldn't open requested file."
  119.         RETURN 0
  120.         END
  121.  
  122.     /* Put a command in the user menu for stopping the movie creation. */
  123.     menu '"------------------------"'
  124.     menu '"Stop Julia Movie"' JuliaMovie stop
  125.  
  126.     INCPAUSE        /* Stop calculations again. */
  127.     CALL SETCLIP("Mand2000FrameNum", 1)
  128.     /* Tell Mand2000 to call this script whenever a pictures finishes calculating. */
  129.     EVENTACTION PICTUREDONE JuliaMovie
  130.  
  131.     SETJULIA StartX StartY
  132.     RETURN 0
  133.  
  134.  
  135.  
  136. StopJULIAMovie:
  137.     /* Tell Mand2000 not to call this script any more. */
  138.     EVENTACTION PICTUREDONE
  139.     /* Remove the `stop Julia movie' menu. */
  140.     CLEARNMENUS 2
  141.     FRAMENUM = GETCLIP("Mand2000FrameNum")
  142.     if (FRAMENUM = "") THEN
  143.         EXIT
  144.     CloseAnim
  145.     CALL SETCLIP("Mand2000FrameNum")
  146.     if (FRAMENUM = 1) THEN
  147.         REQUESTNOTIFY "Zero frames created."
  148.     else if (FRAMENUM = 2) THEN
  149.         REQUESTNOTIFY "One frame created."
  150.     else
  151.         REQUESTNOTIFY "Just created a "FRAMENUM - 1" frame Julia anim.|Use BigAnim or MainView to play it."
  152.     RETURN 0
  153.  
  154.  
  155.  
  156. ContinueJULIAMovie:
  157.     FRAMENUM = GETCLIP("Mand2000FrameNum")
  158.     WriteAnimFrame
  159.     if (RC ~= 0) THEN DO
  160.         REQUESTNOTIFY "Error in saving frame "FRAMENUM".|Aborting animation.|Animation file may be corrupt."
  161.         CALL StopJULIAMovie()
  162.         EXIT
  163.         END
  164.  
  165.     FRAMENUM = FRAMENUM + 1
  166.     CALL SETCLIP("Mand2000FrameNum", FRAMENUM)
  167.  
  168.     FRAMENUM = FRAMENUM - 1    /* Subtract off the starting frame number. */
  169.     IF (FRAMENUM > (NumFrames - 1)) THEN DO
  170.         CALL StopJuliaMovie()
  171.         EXIT
  172.         END
  173.     DONERATIO = FRAMENUM / (NumFrames - 1)    /* Calculate doneratio to be between 0.0 and 1.0. */
  174.     StartX = GETCLIP("JuliaMovieStart.X")
  175.     StartY = GETCLIP("JuliaMovieStart.Y")
  176.     EndX = GETCLIP("JuliaMovieEnd.X")
  177.     EndY = GETCLIP("JuliaMovieEnd.Y")
  178.  
  179.     /* Calculate a new julia seed, part way between start and end. */
  180.     NewX = StartX + (EndX - StartX) * DONERATIO
  181.     NewY = StartY + (EndY - StartY) * DONERATIO
  182.  
  183.     /* Set a new julia seed. */
  184.     SETJULIA NewX NewY
  185.     RETURN 0
  186.